package dontCare.gwtester.client.gwt.leakyAbstraction;

import java.util.ArrayList;
import java.util.List;

import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;

import dontCare.gwtester.client.tool.SourceUrl;
import dontCare.gwtester.client.tool.UnitWidget;

public class RegExp extends UnitWidget {
	private static RegExpUiBinder uiBinder = GWT.create(RegExpUiBinder.class);
	interface RegExpUiBinder extends UiBinder<Widget, RegExp>{}
	
	@UiField TextBox source;
	@UiField TextBox regexp;
	@UiField HTML result;
	
	public RegExp() {
		this.initWidget(uiBinder.createAndBindUi(this));
	}
	
	@UiHandler("run") void clickRun(ClickEvent ce){
		StringBuffer sb = new StringBuffer("<pre>");
		int index = 0;
		for(String s : source.getText().split(regexp.getText())){
			sb.append(index + " : " + s);
			sb.append("<br/>");
			index++;
		}
		sb.append("</pre>");
		result.setHTML(sb.toString());
	}
	
	@Override
	public List<String> getSourceUrl() {
		ArrayList<String> result = new ArrayList<String>();
		result.add(SourceUrl.genJava(RegExp.class));
		result.add(SourceUrl.genUiXml(RegExp.class));
		return result;
	}

	@Override
	public HTML getDescription() {
		return new HTML(
			"RegExp 在不同語言會有不同解讀方式。在 Java 中有「\\Q \\E」的功能，但是在 JS 當中沒有，" +
			"因此造成了 Development Mode（Java）與 Production Mode（JS）執行結果不一樣的狀況。"
		);
	}

	@Override
	public String getName() {
		return "RegExp 問題";
	}
}